| @@ -18,4 +18,18 @@ module JobsHelper | ||
| 18 | 18 | 'in ' + distance_of_time_in_words(time, now) | 
| 19 | 19 | end | 
| 20 | 20 | end | 
| 21 | + | |
| 22 | + # Given an queued job, parse the stored YAML to retrieve the ID of the Agent | |
| 23 | + # meant to be ran. | |
| 24 | + # | |
| 25 | + # Can return nil, or an instance of Agent. | |
| 26 | + def agent_from_job(job) | |
| 27 | + begin | |
| 28 | + Agent.find_by_id(YAML.load(job.handler).args[0]) | |
| 29 | + rescue ArgumentError | |
| 30 | + # We can get to this point before all of the agents have loaded (usually, | |
| 31 | + # in development) | |
| 32 | + nil | |
| 33 | + end | |
| 34 | + end | |
| 21 | 35 | end | 
| @@ -11,6 +11,7 @@ | ||
| 11 | 11 | <table class='table table-striped events'> | 
| 12 | 12 | <tr> | 
| 13 | 13 | <th>Status</th> | 
| 14 | + <th>Agent</th> | |
| 14 | 15 | <th>Created</th> | 
| 15 | 16 | <th>Next Run</th> | 
| 16 | 17 | <th>Attempts</th> | 
| @@ -19,9 +20,11 @@ | ||
| 19 | 20 | </tr> | 
| 20 | 21 |  | 
| 21 | 22 | <% @jobs.each do |job| %> | 
| 23 | + <% agent = agent_from_job(job) %> | |
| 22 | 24 | <tr> | 
| 23 | 25 | <td><%= status(job) %></td> | 
| 24 | - <td title='<%= job.created_at %>'><%= time_ago_in_words job.created_at %> ago</td> | |
| 26 | + <td><%= agent ? link_to(agent.name, agent_path(agent)) : "(deleted)" %></td> | |
| 27 | +            <td title='<%= job.created_at %>'><%= time_ago_in_words job.created_at %> ago <%= agent ? "for #{agent.user.username}" : '' %></td> | |
| 25 | 28 | <td title='<%= job.run_at %>'> | 
| 26 | 29 | <% if !job.failed_at %> | 
| 27 | 30 | <%= relative_distance_of_time_in_words job.run_at %> | 
| @@ -4,8 +4,15 @@ describe JobsController do | ||
| 4 | 4 |  | 
| 5 | 5 | describe "GET index" do | 
| 6 | 6 | before do | 
| 7 | - Delayed::Job.create! | |
| 8 | - Delayed::Job.create! | |
| 7 | + async_handler_yaml = | |
| 8 | + "--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/class 'Agent'\nmethod_name: :async_check_without_delay\nargs:\n- %d\n" | |
| 9 | + | |
| 10 | + Delayed::Job.create!(handler: async_handler_yaml % [agents(:jane_website_agent).id]) | |
| 11 | + Delayed::Job.create!(handler: async_handler_yaml % [agents(:bob_website_agent).id]) | |
| 12 | + Delayed::Job.create!(handler: async_handler_yaml % [agents(:jane_weather_agent).id]) | |
| 13 | + agents(:jane_website_agent).destroy | |
| 14 | + Delayed::Job.create!(handler: async_handler_yaml % [agents(:bob_weather_agent).id], locked_at: Time.now, locked_by: 'test') | |
| 15 | + | |
| 9 | 16 | expect(Delayed::Job.count).to be > 0 | 
| 10 | 17 | end | 
| 11 | 18 |  | 
| @@ -19,7 +26,7 @@ describe JobsController do | ||
| 19 | 26 | expect(users(:jane)).to be_admin | 
| 20 | 27 | sign_in users(:jane) | 
| 21 | 28 | get :index | 
| 22 | - expect(assigns(:jobs).length).to eq(2) | |
| 29 | + expect(assigns(:jobs).length).to eq(4) | |
| 23 | 30 | end | 
| 24 | 31 | end | 
| 25 | 32 |  |